package com.quectel.constant.core.grid;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;

/**
 * 网格管理变量
 *
 * @author: bob
 * @email: bob.yu@quectel.com
 * @date: 2023-02-06 14:34:00
 */
public class GridConstant {

    public static final Pair<String, String> EVENT_CREATE_DATE_SLOT_KEY_PAIR = ImmutablePair.of("createTimeStart", "createTimeEnd");

    public static final String CREATOR_UNIQUE_FLAGS = "creatorUniqueFlags";
    public static final String SOURCE_IDS = "sourceIds";
    /**
     * 事件流转类型
     */
    public static final String EVENT_FLOW_TYPE = "eventFlowType";
    /**
     * 事件下发
     */
    public static final Byte EVENT_FLOW_TYPE_ASSIGN = (byte) 1;
    /**
     * 事件上报
     */
    public static final Byte EVENT_FLOW_TYPE_REPORT = (byte) 2;


    public static final String REGION_LEVEL = "regionLevel";
    public static final String DISTRICT_CODES = "districtCodes";
    public static final String STREET_CODES = "streetCodes";
    public static final String VILLAGE_IDS = "villageIds";
    public static final String GRID_IDS = "gridIds";
    public static final String CURRENT_CODES = "currentCodes";
    public static final String SOURCE_TYPES = "sourceTypes";
    /**
     * 前端筛选网格flag
     */
    public static final String REGION_CODE = "regionCode";
    public static final String SOURCE_TYPE_FLAG = "sourceTypeFlag";


    public static final String EVENT_DEADLINE = "deadline";

    @AllArgsConstructor
    public enum GridEventLevel {
        /**
         * 一般
         */
        GENERAL((byte) 1),
        IMPORTANT((byte) 2),
        ;
        @Getter
        private final Byte level;
    }

    @AllArgsConstructor
    public enum SourceType {

        /**
         * 网格资源类型
         * 1.小区楼栋
         * 2.实有单位
         */
        BUILDING((byte) 1),
        COMPANY((byte) 2),
        ;

        /**
         * 一级分类
         */
        @Getter
        private Byte type;
    }


    /**
     * 区域等级分级枚举
     */
    @AllArgsConstructor
    public enum RegionLevel {
        /**
         * 省
         */
        PROVINCE_LEVEL((byte) 1, "省"),
        /**
         * 市
         */
        CITY_LEVEL((byte) 2, "市"),
        /**
         * 区
         */
        DISTRICT_LEVEL((byte) 3, "区"),
        /**
         * 街道
         */
        STREET_LEVEL((byte) 4, "街道"),
        /**
         * 小区
         */
        VILLAGE_LEVEL((byte) 5, "小区"),
        /**
         * 网格
         */
        GRID_LEVEL((byte) 6, "网格"),
        ;
        @Getter
        private final Byte level;
        @Getter
        private final String desc;

    }


    /**
     * 区域等级分级枚举
     */
    @AllArgsConstructor
    public enum GridEventRecordLogType {
        /**
         * 创建
         */
        CREATE((byte) 1),
        /**
         * 指派
         */
        ASSIGNMENT((byte) 2),
        /**
         * 上报
         */
        REPORT((byte) 3),
        /**
         * 反馈
         */
        FEEDBACK((byte) 4),
        /**
         * 办结
         */
        FINISH((byte) 5),
        /**
         * 驳回
         */
        REJECT((byte) 6),
        /**
         * 预期
         */
        EXPIRED((byte) 6),
        ;
        @Getter
        private final Byte status;

    }

    /**
     * 网格事件创建人员类型
     */
    @AllArgsConstructor
    public enum GridEventRecordPersonType {
        /**
         * 系统用户
         */
        SYS_USER((byte) 1),
        /**
         * 网格员
         */
        GRID_MEMBER((byte) 2),
        /**
         * 系统
         */
        SYS((byte) 3),
        ;
        @Getter
        private final Byte type;

    }

    /**
     * 网格事件创建人员类型
     */
    @AllArgsConstructor
    public enum GridEventRecordSourceType {
        /**
         * 后台创建
         */
        BACKGROUND_CREATION((byte) 1),
        /**
         * 智能发现
         */
        INTELLIGENT_DISCOVERY((byte) 2),
        /**
         * 事件上报
         */
        REPORT((byte) 3),
        ;
        @Getter
        private final Byte type;

    }

    /**
     * 网格事件状态
     */
    @AllArgsConstructor
    public enum GridEventRecordStatus {
        /**
         * 待处理
         */
        TO_BE_PROCESSED((byte) 1),
        /**
         * 待办结
         */
        TO_BE_FINISHED((byte) 2),

        /**
         * 已办结
         */
        FINISHED((byte) 3),
        /**
         * 已驳回
         */
        REJECTED((byte) 4),
        /**
         * 已逾期
         */
        EXPIRED((byte) 5),
        ;
        @Getter
        private final Byte status;

    }


    /**
     * 网格事件操作
     * 1申请办结2上报3办结4驳回
     */
    @AllArgsConstructor
    public enum GridEventRecordHandleType {
        /**
         * 申请办结
         */
        APPLY_FINISH((byte) 1),
        /**
         * 上报
         */
        REPORT((byte) 2),

        /**
         * 办结
         */
        FINISHED((byte) 3),
        /**
         * 驳回
         */
        REJECTED((byte) 4),
        ;
        @Getter
        private final Byte type;

        public static GridEventRecordHandleType getType(Byte value) {
            for (GridEventRecordHandleType x : values()) {
                if (x.getType().equals(value)) {
                    return x;
                }
            }
            return null;
        }
    }


}
